package com.solo.system.service;

import com.mybatisflex.core.paginate.Page;
import com.solo.common.core.base.service.BasicService;
import com.solo.system.api.entity.SysUserRole;
import com.solo.system.model.user.req.AllocatedUserReq;
import com.solo.system.model.user.req.AssignRoleReq;
import com.solo.system.model.user.req.AssignUserReq;
import com.solo.system.model.user.req.UnallocatedUserReq;
import com.solo.system.model.user.resp.AllocatedUserResp;
import com.solo.system.model.user.resp.UnallocatedUserResp;
import com.solo.system.model.user.resp.UserRoleResp;

/**
 * 用户角色关联 Service
 * @author 十一
 * @since 2024-10-16 17:18
 * 人生若只如初见，何事秋风悲画扇
 **/
public interface SysUserRoleService extends BasicService<SysUserRole> {

    /**
     * 分配角色
     * @param req 分配角色请求对象
     * @return boolean
     */
    boolean assignRole(AssignRoleReq req);

    /**
     * 分配用户
     * @param req 请求对象
     * @return boolean
     */
    boolean assignUser(AssignUserReq req);

    /**
     * 查询指定角色已分配的用户分页列表
     * @param page 分页对象
     * @param req 请求对象
     * @return {@link AllocatedUserResp }
     */
    Page<AllocatedUserResp> queryAllocatedUserPage(Page<AllocatedUserResp> page, AllocatedUserReq req);

    /**
     * 查询指定角色未分配的用户分页列表
     * @param page 分页对象
     * @param req 请求对象
     * @return {@link Page }<{@link UnallocatedUserResp }>
     */
    Page<UnallocatedUserResp> queryUnallocatedUserPage(Page<UnallocatedUserResp> page, UnallocatedUserReq req);

    /**
     * 根据用户id查询用户所属角色集合
     * @param userId 用户id
     * @return 用户角色
     */
    UserRoleResp queryUserRole(Long userId);
    
}
